package usually;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

//438. 找到字符串中所有字母异位词
public class Num438_findAnagrams {
    /**
     * 高情商解法
     */
    class Solution {
        public List<Integer> findAnagrams(String s, String p) {
            List<Integer> ans = new ArrayList<>();
            int n = s.length(), m = p.length();
            int[] c1 = new int[26], c2 = new int[26];
            for (int i = 0; i < m; i++) c2[p.charAt(i) - 'a']++;
            for (int l = 0, r = 0; r < n; r++) {
                c1[s.charAt(r) - 'a']++;
                if (r - l + 1 > m) c1[s.charAt(l++) - 'a']--;
                if (check(c1, c2)) ans.add(l);
            }
            return ans;
        }
        boolean check(int[] c1, int[] c2) {
            for (int i = 0; i < 26; i++) {
                if (c1[i] != c2[i]) return false;
            }
            return true;
        }
    }



    /**
     * low比解法
     */
//    public List<Integer> findAnagrams(String s, String p) {
//        List<Integer> list = new ArrayList<>();
//        if (p.length() > s.length())return list;
//        int l = 0 , r = p.length() - 1;
//        while (r < s.length()){
//            if (isAnagrams(s.substring(l , r + 1) , p)){
//                list.add(l);
//            }
//            l++;
//            r++;
//        }
//        return list;
//
//    }
//    public boolean isAnagrams(String s1 , String s2){
//        if (s1.length() != s2.length())return false;
//        int []arr1 = new int[26];
//        int []arr2 = new int[26];
//        for (int i = 0; i < s1.length(); i++) {
//            arr1[s1.charAt(i) - 'a']++;
//            arr2[s2.charAt(i) - 'a']++;
//
//        }
//        return Arrays.equals(arr1 , arr2);
//    }
}
